package com.ljxt.dt.util;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author 唐春劲
 * @version 1.0.0
 * @date 2020-04-26 15:19
 * @copyright 老九学堂
 */

public  class  ServiceUtil {

	/**
	 * 复制对象
	 * @param <T>
	 * @param src 复制的源对象
	 * @param dest 复制的目标对象 （继承的新对象）
	 * @return
	 */
    public  static   <T> T  setObj(T src,T dest) {
        //得到要复制的对象的class
        Class<?> clazz = src.getClass();
        //得到它所有的属性
        BeanInfo beanInfo = null;
        try {
            beanInfo = Introspector.getBeanInfo(clazz);
        } catch (IntrospectionException e) {
            e.printStackTrace();

        }
        //得到它所有的属性
        PropertyDescriptor[] propertyDescriptors = 	beanInfo.getPropertyDescriptors();
        //循环遍历
        for (PropertyDescriptor propertyDescriptor:propertyDescriptors){
            //得到它的get方法
            Method getMethod = propertyDescriptor.getReadMethod();
            //得到它的set方法
            Method setMethod = propertyDescriptor.getWriteMethod();
            //得到set方法的参数类型

            if(setMethod == null) {
                continue;
            }

            //赋值
            try {
                Object obj = getMethod.invoke(src);
                setMethod.invoke(dest,obj);
            } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                continue;

            }

        }

        return dest;
    }
	

    public  static  String dateFormat(Date date){
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String s =  format.format(date);
        return s;
    }


}
